package arreglos;
import accesoarchivos.ClienteArchivo;
import constantes.Constantes;
import entidades.Cliente;


import java.util.ArrayList;

public class ClienteArrayList {

    ArrayList<Cliente> listadoClientes = null;
    ClienteArchivo clienteArchivo = null;

    public ClienteArrayList() {

        listadoClientes = new ArrayList<Cliente>();
        clienteArchivo = new ClienteArchivo();
        listadoClientes = clienteArchivo.LeerArchivoCliente();

    }

    public ArrayList<Cliente> ListadoClientes() {
        ArrayList<Cliente> listado = null;
        try {
            listado = new ArrayList<Cliente>();
            listado = listadoClientes;
        } catch (Exception ex) {
        }
        return listado;
    }

    private int ObtenerCodigoParaInsertar() {
        int codigo = 0;
        try {
            ArrayList<Cliente> arraylist = new ArrayList<Cliente>();
            arraylist = listadoClientes;

            int numeroClientes = arraylist.size();
            if (numeroClientes == 0) {
                codigo = 1;
            } else {

                for (Cliente cliente : listadoClientes) {
                    codigo = Integer.parseInt(cliente.getCodigo());
                }
                codigo = codigo + 1;
            }
        } catch (Exception ex) {
        }
        return codigo;
    }

    public int AgregarCliente(Cliente cliente) {
        int codigo = 0;
        try {
            codigo = ValidarDni_A_Insertar(cliente);
            if (codigo != Constantes.ERROR_YA_EXISTE_DNI_AGREGAR) {
                codigo = ObtenerCodigoParaInsertar();
                cliente.setCodigo(codigo + "");
                listadoClientes.add(cliente);
                clienteArchivo.EscribirArchivoCliente(listadoClientes);
            }
        } catch (Exception ex) {
        }
        return codigo;
    }





    private int ValidarDni_A_Insertar(Cliente pCliente) {
        int codigo = 0;
        try {
            ArrayList<Cliente> arraylist = new ArrayList<Cliente>();
            arraylist = listadoClientes;

            for (Cliente cliente : arraylist) {
                if (cliente.getDni().equals(pCliente.getDni())) {
                    codigo = Constantes.ERROR_YA_EXISTE_DNI_AGREGAR;
                }
            }
        } catch (Exception ex) {
        }
        return codigo;
    }

    public Cliente BuscarDatosClientePorCodigo(Cliente pCliente) {
        String codigoCliente = "";
        Cliente clienteEncontrado = null;
        try {
            clienteEncontrado = new Cliente();
            codigoCliente = pCliente.getCodigo().trim();
            ArrayList<Cliente> arraylist = new ArrayList<Cliente>();
            arraylist = listadoClientes;

            for (Cliente cliente : arraylist) {
                if (cliente.getCodigo().trim().equals(codigoCliente)) {
                    clienteEncontrado=cliente;     
                    break;
                }
            }
        } catch (Exception ex) {
        }
        return clienteEncontrado;
    }
    
    public Cliente BuscarDatosClientePorCodigoBonus(Cliente pCliente) {
      
        Cliente clienteEncontrado = null;
        try {
            clienteEncontrado = new Cliente();
           
            ArrayList<Cliente> arraylist = new ArrayList<Cliente>();
            arraylist = listadoClientes;

            for (Cliente cliente : arraylist) {
                if (cliente.getNumTarjetaBonus()==pCliente.getNumTarjetaBonus()) {
                    clienteEncontrado=cliente;     
                    break;
                }
            }
        } catch (Exception ex) {
        }
        return clienteEncontrado;
    }
    
    public int ModificarCliente(Cliente cliente) {
        int codigo = 0;
        try {

          
            codigo = ValidarDni_A_Insertar(cliente);
           
         
                int indiceArreglo = 0;
                for (Cliente entidad : listadoClientes) {
                    if (entidad.getCodigo().equals(cliente.getCodigo())) {
                        listadoClientes.remove(indiceArreglo);
                        listadoClientes.add(indiceArreglo, cliente);
                        break;
                    }
                    indiceArreglo++;
                }
                clienteArchivo.EscribirArchivoCliente(listadoClientes);
            
        } catch (Exception ex) {
        }
        return codigo;
    }


    public int EliminarCliente(Cliente cliente) {
        int codigo = 0;
        try {

            int indiceArreglo = 0;
            for (Cliente entidad : listadoClientes) {

                if (entidad.getCodigo().equals(cliente.getCodigo())) {                
                    
                	listadoClientes.remove(indiceArreglo);
                    codigo = 1;
                   
                    break;
                }
                indiceArreglo++;
            }
            clienteArchivo.EscribirArchivoCliente(listadoClientes);           

        } catch (Exception ex) {
        }
        return codigo;
    }
}
